package com.play2gether;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by Raul on 29/03/14.
 */
public class PerfilEditarActivity extends ActionBarActivity implements View.OnClickListener, AdapterView.OnItemSelectedListener {

    public String id_usuario;

    public  Button             btAceptar;
    public  TextView           txtNombre;
    public  TextView           txtFecha;
    public  TextView           txtApodo;
    public RadioGroup          rdgSexo;
    public Spinner             spSugerencias;

    public String nombre;
    public String fecha;
    public String sexo;
    public String apodo;
    public int ciudad;
    public int pais;
    public int sugerencias;

    private DataBaseManager    db;
    public String[] datos;
    private Cursor cursor;
    public String url;
    private String[] estado;

    List<String> list;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.editar_perfil);

        url = "http://mediadomeprojects.com/arkdyanbyte/play2gether/public/actualizar_perfil";
        //Clase para la base de datos
        db = new DataBaseManager(this);

        Bundle bundle = getIntent().getExtras();
        id_usuario     = bundle.getString("id");
        estado = bundle.getStringArray("estado");

        configurarVista();
        configurarNavbar();
        cargarSugerencias();
        cargarDatos();
        //spCiudad.setOnItemSelectedListener(this);
        //String valorItem = mySpinner.getSelectedItem().toString();
    }
    private void configurarVista(){
        //Llenar las variables con los elementos del layout
        txtNombre = (TextView) findViewById(R.id.inputNombre);
        txtFecha = (TextView) findViewById(R.id.inputFecha);
        txtApodo = (TextView) findViewById(R.id.inputApodo);
        rdgSexo = (RadioGroup) findViewById(R.id.rdgSexo);
        spSugerencias = (Spinner) findViewById(R.id.spinnerSugerencias);
        btAceptar = (Button) findViewById(R.id.btGuardar);

        btAceptar.setOnClickListener(this);
    }
    private void configurarNavbar(){
        ActionBar actionBar = getSupportActionBar();
        actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
        actionBar.setCustomView(R.layout.navbar);

        Button btFormularioNV = (Button) findViewById(R.id.btFormularioNV);
        Button btSugerenciaNV = (Button) findViewById(R.id.btSugerenciaNV);
        Button btOpcionesNV   = (Button) findViewById(R.id.btOpcionesNV);
        Button btLogoNV       = (Button) findViewById(R.id.btLogoNV);
        Button btAtras        = (Button) findViewById(R.id.bt_atras);
        Button btSincronizar  = (Button) findViewById(R.id.bt_sincronizar);

        TextView tituloNav = (TextView) findViewById(R.id.tituloLayout);
        tituloNav.setText("Editar perfil");

        btOpcionesNV.setOnClickListener(this);
        if (!estado[0].equals("2")) {
            btFormularioNV.setAlpha(0);
            btSugerenciaNV.setAlpha(0);
            btSincronizar.setAlpha(0);
        } else {
            btFormularioNV.setOnClickListener(this);
            btSugerenciaNV.setOnClickListener(this);
        }
            btLogoNV.setOnClickListener(this);
            btAtras.setOnClickListener(this);
            btSincronizar.setOnClickListener(this);
            //btAtras.setAlpha(0);
            //btSincronizar.setAlpha(0);
            //btOpcionesNV.setAlpha(0);

        boolean haySugerencias = db.comprobarSugerencias(id_usuario);
        if (haySugerencias){ btSugerenciaNV.setBackground(this.getResources().getDrawable(R.drawable.bt_sugerencias_notificacion)); }
        else { btSugerenciaNV.setBackground(this.getResources().getDrawable(R.drawable.bt_sugerencia_nav)); }

        boolean hayFormularios = db.comprobarFormularios(id_usuario);
        if (hayFormularios){ btFormularioNV.setBackground(this.getResources().getDrawable(R.drawable.bt_formulario_notificacion)); }
        else { btFormularioNV.setBackground(this.getResources().getDrawable(R.drawable.bt_formulario_nav)); }
    }
    private void cargarDatos(){
        Bundle bundle = getIntent().getExtras();
        nombre        = bundle.getString("nombre");
        fecha         = bundle.getString("fecha");
        sexo          = bundle.getString("sexo");
        ciudad        = bundle.getInt("ciudad");
        pais          = bundle.getInt("pais");
        sugerencias   = bundle.getInt("notif");
        apodo         = bundle.getString("apodo");

        txtNombre.setText(nombre);
        txtFecha.setText(fecha);
        txtApodo.setText(apodo);

        if (sexo.equals("Mujer"))      { rdgSexo.check(R.id.radioMujer);  }
        else if (sexo.equals("Hombre")) { rdgSexo.check(R.id.radioHombre); }

    }
    private void cargarSugerencias(){
        int num = db.obtenerNumPeticiones(id_usuario);

        ArrayAdapter<CharSequence> adapter;
        adapter = ArrayAdapter.createFromResource(this,R.array.opSugerencias,android.R.layout.simple_spinner_item);

        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        spSugerencias.setAdapter(adapter);
        spSugerencias.setSelection(num-1);

    }

    @Override
    public void onClick(View v) {
        Intent intent;
        intent = new Intent();

            switch (v.getId()) {
                case R.id.btGuardar:
                    try {
                        new ModificarUsuario().execute();
                    } catch (Exception e) {
                        e.printStackTrace();
                        Log.e("ERROR", e.getMessage());
                    }
                    break;
                //Botones para el natvar
                case R.id.btFormularioNV:
                    intent.setClass(this, indexFormularios.class);
                    intent.putExtra("id",id_usuario);
                    intent.putExtra("estado",estado);
                    startActivity(intent);
                    finish();
                    break;
                case R.id.btSugerenciaNV:
                    intent.setClass(this, indexSugerencias.class);
                    intent.putExtra("id",id_usuario);
                    intent.putExtra("estado",estado);
                    startActivity(intent);
                    finish();
                    break;
                case R.id.btOpcionesNV:
                    intent.setClass(this, menuActivity.class);
                    intent.putExtra("id",id_usuario);
                    intent.putExtra("estado",estado);
                    startActivity(intent);
                    finish();
                    break;
                case R.id.bt_atras:
                    finish();
                    break;
                case R.id.btLogoNV:
                    finish();
                    break;
                case R.id.bt_sincronizar:
                    sincronizar();
                    break;
            }
    }

    @Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {

    }

    @Override
    public void onNothingSelected(AdapterView<?> adapterView) {

    }

    public class ModificarUsuario extends AsyncTask<Void, Void, JSONObject> {
        //TextView, es el primer dato que se le pasa a doInBackground.
        //El segundo que está en void es el dato que se va actualizar cada vez que se llame al metodo onProgressUpdate(No sobreescrito) para mostrar un mensaje de se está cargando o mostrar una barra de carta
        //El tercero es lo que nos va a devolver. En este caso un String.

        protected void onPreExecute(){ //Aquí se ponen lo que quiero que haga mientras se cargan los datos. Se ejecuta antes de el doInBackground
            Toast.makeText(getApplicationContext(),"Conectando con el servidor", Toast.LENGTH_SHORT).show();
        }

        @Override
        protected JSONObject doInBackground(Void... JSONObject) { // Segunda función. Nos devuelve el parámetro que viene del post se modificará todo lo gráfico que se hace en primer plano.

            HttpClient cliente = new DefaultHttpClient();
            HttpPost htppost = new HttpPost(url);
            //BufferedReader bfr;
            String text = "Error";
            String result="";
            InputStream is = null;
            JSONObject json = null;

            //Obtener los datos del formulario
            nombre = txtNombre.getText().toString();
            fecha  = txtFecha.getText().toString();
            apodo  = txtApodo.getText().toString();

            //int radioButtonId = rdgSexo.getCheckedRadioButtonId();   //Me devuelve un id muy largo
            //String sexo = Integer.toString(radioButtonId);

            //Se obtienen los datos del sexo
            RadioButton h = (RadioButton) findViewById(R.id.radioHombre);
            if (h.isChecked()){ sexo = "h";}
            else              { sexo = "m"; }

            // String sexo = radioButtonId.v

            //Obtengo los items seleccionados de los combos
            String s_suger = spSugerencias.getSelectedItem().toString();
            sugerencias = 0;
            if      (s_suger.equals("Nunca"))              { sugerencias = 1; }
            else if (s_suger.equals("Pocas"))              { sugerencias = 2; }
            else if (s_suger.equals("A veces"))            { sugerencias = 3; }
            else if (s_suger.equals("A menudo"))           { sugerencias = 4; }
            else if (s_suger.equals("Sólo fin de semana")) { sugerencias = 5; }
            else                                           { sugerencias = 0; }

           //Obtengo los ids de los combos seleccionados (Es provisional)
           // ciudad = db.obtenerIdPaisCiudadVives(s_ciudad, "ciudad");
           // pais = db.obtenerIdPaisCiudadVives(s_pais, "pais");
           // vives = db.obtenerIdPaisCiudadVives(s_vives, "vives_con");

            //Añadir parametros
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("id_usuario",id_usuario));
            params.add(new BasicNameValuePair("nombre",nombre));
            params.add(new BasicNameValuePair("fecha",fecha));
            params.add(new BasicNameValuePair("sexo",sexo));
            params.add(new BasicNameValuePair("sugerencias",Integer.toString(sugerencias)));
            params.add(new BasicNameValuePair("apodo",apodo));

            try {
                htppost.setEntity(new UrlEncodedFormEntity(params));
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }

            try {
                HttpResponse respuesta = cliente.execute(htppost);
                HttpEntity entity = respuesta.getEntity();
                is = entity.getContent();
                //text = EntityUtils.toString(entity);
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try{
                BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                    sb.append(line + "\n");
                }
                is.close();
                result=sb.toString();
            } catch(Exception e){}

            try{
                json = new JSONObject(result);
            }catch(JSONException e){}
            return json;
        }
        protected void onPostExecute(JSONObject json){
            String estado = "";
            String asunto = "";
            try {
                estado = (String) json.get("estado");
                if (estado.equals("ok")){
                    db.modificarUsuario(id_usuario, nombre, fecha, sexo, sugerencias, apodo);
                    mostrarAlerta();
                } //Si no salta a la excepción
                asunto = (String) json.get("asunto");
            } catch (JSONException e) {
                Toast.makeText(getApplicationContext(),"No se han modificado los datos!!", Toast.LENGTH_SHORT).show();
                e.printStackTrace();
            }
        }
    }
    public void mostrarAlerta(){
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(PerfilEditarActivity.this);
        alertDialog.setMessage("Datos guardados correctamente");

        alertDialog.setPositiveButton("VOLVER",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        // Write your code here to execute after dialog
                        //Intent intent = new Intent(PerfilEditarActivity.this,PerfilActivity.class);
                        //intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        //startActivity(intent);
                        finish();
                    }
                });
        alertDialog.show();
    }
    public void sincronizar(){
        Sincronizar sinc = new Sincronizar(id_usuario,this);
        sinc.sincronizar();

    };
}
